package dao;

import java.util.List;

import com.db4o.query.Predicate;
import model.Aluno;
import model.Professor;
import model.Turma;

public class DAOTurma extends DAODB4o<Turma>{
	
	public Turma find(int num){
		Turma t = new Turma();
		t.setNumero(num);
		return (Turma) super.find(t);	
	}
	
	public void persist(Turma t) throws Exception{
		Turma t1 = find(t.getNumero());
		if (t1==null)
			super.persist(t);			
		else
			throw new Exception ("Nao e possivel persistir a turma "+t.getNumero()+" - Id duplicado");
	}
	
	public List<Turma> findTurmas(Aluno a){		 
		Turma t = new Turma();
		t.addAluno(a);
		List<Turma> lista = getManager().queryByExample(t);
		return lista;
	}
	
	public List<Turma> findTurmasDisponiveis(final Aluno a){
		List<Turma> lista =
			getManager().query(new Predicate<Turma>() {
				private static final long serialVersionUID = 1L;

				public boolean match(Turma t) {
					return !(t.getAlunos().contains(a));
				}
			}
			);		
		return lista;
	}
	
	public List<Turma> findTurmas(Professor p){
		Turma t = new Turma();
		t.setProfessor(p);
		List<Turma> lista = getManager().queryByExample(t);
		return lista;
	}
}
